package com.xkcyy.one.controller;

import com.xkcyy.one.common.Result;
import com.xkcyy.one.entity.Tool;
import com.xkcyy.one.service.ToolService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 工具控制器
 * 
 * @author yuand
 */
@RestController
@RequestMapping("/api/tools")
public class ToolController {

    private final ToolService toolService;

    @Autowired
    public ToolController(ToolService toolService) {
        this.toolService = toolService;
    }

    /**
     * 获取所有工具
     *
     * @return 工具列表
     */
    @GetMapping("/list")
    public Result<List<Tool>> getAllTools() {
        return Result.success(toolService.getAllTools());
    }

    /**
     * 根据状态获取工具列表
     *
     * @param status 状态
     * @return 工具列表
     */
    @GetMapping("/status")
    public Result<List<Tool>> getToolsByStatus(@RequestParam String status) {
        return Result.success(toolService.getToolsByStatus(status));
    }

    /**
     * 根据用户ID获取工具列表
     *
     * @param userId 用户ID
     * @return 工具列表
     */
    @GetMapping("/user")
    public Result<List<Tool>> getToolsByUserId(@RequestParam Long userId) {
        return Result.success(toolService.getToolsByUserId(userId));
    }

    /**
     * 根据ID获取工具
     *
     * @param id 工具ID
     * @return 工具信息
     */
    @GetMapping("/get")
    public Result<Tool> getToolById(@RequestParam Long id) {
        return Result.success(toolService.getToolById(id));
    }

    /**
     * 创建工具
     *
     * @param tool 工具信息
     * @return 创建后的工具信息
     */
    @PostMapping("/create")
    public Result<Tool> createTool(@RequestBody Tool tool) {
        return Result.success(toolService.createTool(tool));
    }

    /**
     * 更新工具
     *
     * @param id   工具ID
     * @param tool 工具信息
     * @return 更新后的工具信息
     */
    @PutMapping("/update")
    public Result<Tool> updateTool(@RequestParam Long id, @RequestBody Tool tool) {
        tool.setId(id);
        return Result.success(toolService.updateTool(tool));
    }

    /**
     * 删除工具
     *
     * @param id 工具ID
     * @return 操作结果
     */
    @DeleteMapping("/delete")
    public Result<Void> deleteTool(@RequestParam Long id) {
        toolService.deleteTool(id);
        return Result.success();
    }

    /**
     * 更新工具状态
     *
     * @param id     工具ID
     * @param status 新状态
     * @return 更新后的工具信息
     */
    @PutMapping("/status")
    public Result<Tool> updateToolStatus(@RequestParam Long id, @RequestParam String status) {
        return Result.success(toolService.updateToolStatus(id, status));
    }

    /**
     * 根据实现类型获取工具列表
     *
     * @param type 实现类型
     * @return 工具列表
     */
    @GetMapping("/implementation")
    public Result<List<Tool>> getToolsByImplementationType(@RequestParam String type) {
        return Result.success(toolService.getToolsByImplementationType(type));
    }

    /**
     * 根据脚本ID获取工具列表
     *
     * @param scriptId 脚本ID
     * @return 工具列表
     */
    @GetMapping("/script")
    public Result<List<Tool>> getToolsByScriptId(@RequestParam Long scriptId) {
        return Result.success(toolService.getToolsByScriptId(scriptId));
    }
}